package main

import "fmt"

type Book struct {
	BookName string
	price    float64
}
type Person struct {
	name string
	age  int
	book Book
}

type Person4 struct {
	name  string
	age   int
	books []Book
}

func printInfo(p Person) { //将结构体对象变量传进来
	fmt.Printf("姓名：%s,年龄：%d,所看的书名：%s, 书的价格：%.2f\n", p.name, p.age, p.book.BookName, p.book.price)
}
//结构体实例化

func printInfo2(p Person4) { //传的是结构体对象
	for i,v:=range p.books{
		fmt.Printf("姓名：%s,年龄：%d,书的编号：%d 所看的书名：%s, 书的价格：%.2f\n", p.name, p.age,i+1 , v.BookName,v.price)
	}
}
func main() {
	b1 := Book{"金平梅", 35.8}
	fmt.Println(b1) //{金平梅 35.8}

	p1 := Person{}  //创建一个Person结构体变量,p1就能取到结构体中的属性
	fmt.Println(p1) //{ 0 { 0}}
	p1.name = "王二狗"
	p1.age = 30
	p1.book = b1
	//因为上面b1已经创建好了对象，已经给Book属性赋值了．把值直接给p1.book就行了
	//就相当于p1.book=Book{"金平梅",35.8}是一个道理
	fmt.Println(p1) //{王二狗 30 {金平梅 35.8}}
	printInfo(p1)   //姓名：王二狗,年龄：30,所看的书名：金平梅, 书的价格：35.80

	b2 := Book{"十万个为啥", 44.8}
	p2 := Person{"李小花", 18, b2}
	printInfo(p2) //姓名：李小花,年龄：18,所看的书名：十万个为啥, 书的价格：44.80

	p3 := Person{
		name: "rose",
		age:  30,
		book: Book{
			BookName: "西游戏",
			price:    88.9,
		},
	}
	printInfo(p3) //姓名：rose,年龄：30,所看的书名：西游戏, 书的价格：88.90

	p4 := Person{}
	p4.name = "jack"
	p4.age = 28
	p4.book = Book{
		BookName: "红楼梦",
		price:    58.6,
	}
	printInfo(p4) //姓名：jack,年龄：28,所看的书名：红楼梦, 书的价格：58.60

	p5 := Person4{}
	p5.name="小龙"
	p5.age=22
	b3:=Book{"王小二",34.6}
	b4:=Book{"面面圆到",88.6}
	p5.books=[]Book{b3,b4,Book{"好爸爸坏爸爸",13.1}}
	for i,v:=range p5.books{
		fmt.Printf("姓名:%s，年龄：%d,%d,书名：%s,书价格：%.2f\n",p5.name,p5.age,i+1,v.BookName,v.price)
		/*
		姓名:小龙，年龄：22,1,书名：王小二,书价格：34.60
		姓名:小龙，年龄：22,2,书名：面面圆到,书价格：88.60
		姓名:小龙，年龄：22,3,书名：好爸爸坏爸爸,书价格：13.10
		*/
	}
	p6:=Person4{"如花",17,make([]Book,0,10)}
	fmt.Println(p6)
	p6.books=append(p6.books,Book{"火影忍者",14.3})
	p6.books=append(p6.books,Book{"小猪佩奇",48.5})
	p6.books=append(p6.books,Book{"熊出没",55.5})
	p6.books=append(p6.books,Book{"天线宝宝",67.5})
	fmt.Println(p6.books)
	printInfo2(p6)
	/*
	姓名：如花,年龄：17,书的编号：1 所看的书名：火影忍者, 书的价格：14.30
	姓名：如花,年龄：17,书的编号：2 所看的书名：小猪佩奇, 书的价格：48.50
	姓名：如花,年龄：17,书的编号：3 所看的书名：熊出没, 书的价格：55.50
	姓名：如花,年龄：17,书的编号：4 所看的书名：天线宝宝, 书的价格：67.50
	*/

}
